package com.topwalk.iwp.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 基本工具类 .
 * <p>
 * -----------------------------------------------------------------------------
 * <p>
 * 工程名 ： IWP
 * <p>
 * 授权 : (C) Copyright topwalk Corporation 2006-2011
 * <p>
 * 公司 : 北京天行网安信息技术有限责任公司
 * <p>
 * -----------------------------------------------------------------------------
 * <p>
 * <font color="#FF0000">注意: 本内容仅限于北京天行网安公司内部使用，禁止转发</font>
 * <p>
 * 
 * @version 1.0
 * @author 张华永
 * @lastMonify 2011-12-05
 * @since JDK1.6
 */
public class ToolUtil {
	
	/**
	 * HTML标签转义
	 * @param str
	 * @return
	 */
	public static String htmlspecialchars(String str) {
		str = str.replaceAll("&", "&amp;");
		str = str.replaceAll("<", "&lt;");
		str = str.replaceAll(">", "&gt;");
		str = str.replaceAll("\"", "&quot;");
		return str;
	}
	
	/**
	 * 字符串按字节截取
	 * @param str 原字符
	 * @param len 截取长度
	 * @return
	 */
	public static String splitString(String str, int len) {
	//	return splitString(str, len, "...");
		return rmSubStr(str,len/2);
	}
	
	/**
	 * 截取字符串
	 * @param str
	 * @param length
	 * @return
	 */
	public static String rmSubStr(String str, int length) {
		return rmNullStr(str).length() > length ? str.substring(0, length)
				+ "..." : rmNullStr(str);
	}

	/**
	 * 字符串按字节截取
	 * @param str 原字符
	 * @param len 截取长度
	 * @param elide 省略符
	 * @return
	 */
	public static String splitString(String str, int len, String elide) {
		
		if (str == null) {
			return "";
		}
		
		byte[] strByte = str.getBytes();
		int strLen = strByte.length;
		int elideLen = 0;
		
		if (len >= strLen || len < 1) {
			return str;
		}
		
		if (len - elideLen > 0) {
			len = len - elideLen;
		}
		
		int count = 0;
		
		for (int i = 0; i < len; i++) {
			
			int value = (int) strByte[i];
			
			if (value < 0) {
				count++;
			}
		}
		
		if (count % 2 != 0) {
			len = (len == 1) ? len + 1 : len - 1;
		}
		
		return new String(strByte, 0, len) + elide.trim();
	}
	
	/**
	 * 判断参数是否空串或NULL值
	 * @param str
	 * @return
	 */
	public static Boolean checkStrIsNull(String str){
		Boolean flag = false;
		
		if(null == str || str.trim().length() == 0)
			flag = true;
		
		return flag;
	}

	/**
	 * 验证字符串是否为NULL，是的话转换成“”空串，否则去掉两端空格，然后返回
	 * 
	 * @param str
	 * @return
	 */
	public static String rmNullStr(String str) {
		return (str == null) ? "" : str.trim();
	}

	/**
	 * 验证对象是否为NULL,是的话转换成“”空串，否则将其转变成字符串
	 * 
	 * @param obj
	 * @return
	 */
	public static String rmNullObj(Object obj) {
		return (obj == null) ? "" : obj.toString().trim();
	}

	/**
	 * 格式化日期
	 * 
	 * @param date
	 * @return
	 */
	public static String getDateFormat(String strDate) {
		String dateTime = "";
		if (strDate != null) {
			DateFormat df = DateFormat.getDateInstance();
			try {
				Date date = df.parse(strDate);
				SimpleDateFormat fmt = new SimpleDateFormat(
						"yyyy-MM-dd HH:mm:ss");
				dateTime = fmt.format(date);
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		return dateTime;
	}

	/**
	 * 格式化日期
	 * 
	 * @param date
	 * @return
	 */
	public static String getDateFormat(Date date) {
		String dateTime = "";
		if (date != null) {
			SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
			dateTime = fmt.format(date);
		}
		return dateTime;
	}

	/**
	 * File转换为byte[]
	 * 
	 * @param file
	 * @return
	 */
	public static byte[] getBytesFromFile(File file) {
		if (file == null) {
			return null;
		}

		try {
			FileInputStream stream = new FileInputStream(file);
			ByteArrayOutputStream out = new ByteArrayOutputStream(1000);

			byte[] b = new byte[1000];
			int n;
			while ((n = stream.read(b)) != -1) {
				out.write(b, 0, n);
			}
			stream.close();
			out.close();

			return out.toByteArray();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return null;
	}
	
	/**
	 * 将日期字符串转换成Date类型<br>
	 * -------------------------------------------------------------------------------------<br>
	 * <font color='red'>日期字符串格式和类型对照表：</font>
	 * <table border="1" width="300">
	 * <tr><td align='center'>日期字符串格式</td><td align='center'>对应类型编码</td></tr>
	 * <tr><td>yyyy-MM-dd HH:mm:ss</td><td align='center'>1</td></tr>
	 * <tr><td>yyyy-MM-dd HH:mm</td><td align='center'>2</td></tr>
	 * <tr><td>yyyy-MM-dd HH</td><td align='center'>3</td></tr>
	 * <tr><td>yyyy-MM-dd</td><td align='center'>4</td></tr>
	 * </table><br>
	 * -------------------------------------------------------------------------------------<br>
	 * @param strDate 日期字符串
	 * @param type 输入的日期字符串的类型编码
	 * @return
	 */
	public static Date stringToDate(String strDate,int type){
		SimpleDateFormat sdf = null;
		
		switch (type) {
		case 1:
			sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			break;
		case 2:
			sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
			break;
		case 3:
			sdf = new SimpleDateFormat("yyyy-MM-dd HH");
			break;
		case 4:
			sdf = new SimpleDateFormat("yyyy-MM-dd");
			break;
		default:
			break;
		}
		
		Date date = null;
		try {
			date = sdf.parse(strDate);
		} catch (ParseException e) {
			System.out.println("输入的日期字符串[" + strDate + "]与类型[" + type + "]可能格式不正确。");
		}
		return date;
	}
	
	/**
	 * 毫秒值转字符串，字符串格式：yyyy-MM-dd HH:mm:ss
	 * @param time
	 * @return
	 */
	public static String millTime2String(long time){
		SimpleDateFormat sdf = null;
		sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d = new Date(time);
		return sdf.format(d);
	}
}
